<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    //防抖debounce代码：
    function debounce(fn) {
        var timeout = null; // 创建一个标记用来存放定时器的返回值
        var b = 1
        var c = 2
        return function (b,c) {
            // 每当用户输入的时候把前一个 setTimeout clear 掉
            this.a = 123
            console.log(b,c);
            clearTimeout(timeout);
            // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发，就不会执行 fn 函数
            timeout = setTimeout(() => {
                console.log([...arguments]);
                fn.apply(this, [...arguments]);
            }, 200);
        };
    }
    // 处理函数
    function handle(b,c) {
        console.log(this.a, arguments, b, c);
    }

    //事件
    // window.addEventListener('resize', debounce(handle));
   debounce(handle)(66,88,99)

    // function debounce(func, wait, immediate) {
    //     let timer;
    //     return function () {
    //         let context = this;
    //         let args = arguments;

    //         if (timer) clearTimeout(timer);
    //         if (immediate) {
    //             var callNow = !timer;
    //             timer = setTimeout(() => {
    //                 timer = null;
    //             }, wait)
    //             if (callNow) func.apply(context, args)
    //         } else {
    //             timer = setTimeout(function () {
    //                 func.apply(context, args)
    //             }, wait);
    //         }
    //     }
    // }
    // function handle() {
    //     console.log(Math.random());
    // }
    // // window.addEventListener("mousemove",debounce(handle,1000,true)); // 调用立即执行版本
    // window.addEventListener("mousemove", debounce(handle, 200, false)); // 调用非立即执行版本
</script>

</html>